package com.dms.modules.product.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dms.modules.product.dto.ProductSkuDTO;
import com.dms.modules.product.entity.ProductSku;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface ProductSkuService extends IService<ProductSku> {
    
    /**
     * 根据商品ID获取SKU列表
     * @param productId 商品ID
     * @return SKU列表
     */
    List<ProductSku> getByProductId(Long productId);
    
    /**
     * 批量保存SKU
     * @param skuList SKU列表
     * @return 是否成功
     */
    boolean saveBatch(List<ProductSku> skuList);
    
    /**
     * 根据商品ID删除SKU
     * @param productId 商品ID
     * @return 是否成功
     */
    boolean deleteByProductId(Long productId);
    
    /**
     * 更新SKU库存
     * @param skuId SKU ID
     * @param quantity 数量变化（正数增加，负数减少）
     * @return 是否成功
     */
    boolean updateStock(Long skuId, Integer quantity);

    /**
     * 创建SKU
     * @param skuDTO SKU信息
     * @return 是否成功
     */
    boolean create(ProductSkuDTO skuDTO);

    /**
     * 更新SKU
     * @param skuDTO SKU信息
     * @return 是否成功
     */
    boolean update(ProductSkuDTO skuDTO);

    /**
     * 批量更新SKU状态
     * @param skuIds SKU ID列表
     * @param status 状态
     * @return 是否成功
     */
    boolean updateStatus(List<Long> skuIds, Integer status);

    /**
     * 批量更新SKU价格
     * @param skuPriceMap SKU价格映射
     * @return 是否成功
     */
    boolean updatePrices(Map<Long, BigDecimal> skuPriceMap);

    /**
     * 批量更新SKU库存
     * @param skuStockMap SKU库存映射
     * @return 是否成功
     */
    boolean updateStocks(Map<Long, Integer> skuStockMap);

    /**
     * 分页查询SKU列表
     * @param page 分页参数
     * @param productId 商品ID
     * @param status 状态
     * @return SKU分页列表
     */
    IPage<ProductSku> pageSkus(Page<ProductSku> page, Long productId, Integer status);

    /**
     * 检查SKU编码是否已存在
     * @param skuCode SKU编码
     * @param excludeId 排除的SKU ID
     * @return 是否存在
     */
    boolean existsSkuCode(String skuCode, Long excludeId);
} 